import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path";
// setup语法糖，直接添加name的插件
import VueSetupExtend from 'vite-plugin-vue-setup-extend'
// 打包压缩插件
import viteCompression from 'vite-plugin-compression'

// 传参获取环境变量
const getEnvFn = (mode, target) => loadEnv(mode, process.cwd())[target]

// https://vitejs.dev/config/
export default ({ mode }) =>
  defineConfig({
    plugins: [
      vue(),
      VueSetupExtend(),
      // gzip压缩 生产环境生成 .gz 文件
      viteCompression({
        verbose: true, // 是否在控制台输出压缩结果
        disable: false, // 是否禁用
        threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
        algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
        ext: '.gz', // 生成的压缩包后缀
      }),
    ],
    // 路径别名
    resolve: {
      alias: {
        // 如果报错__dirname找不到，需要安装node，执行npm i @types/node --save-dev
        "@": path.resolve(__dirname, "src"),
        "@assets": path.resolve(__dirname, "src/assets"),
      },
    },
    // 启动服务配置
    server: {
      host: '0.0.0.0',
      port: 8080,
      open: true, // 是否自动在浏览器打开
      https: false, // 是否开启 https
      cors: true, // 允许跨域
      // 代理配置
      proxy: {
        '/api': {
          // target: "http://127.0.0.1:8092", // 后台接口
          target: getEnvFn(mode, 'VITE_APP_HTTP'), // 后台接口
          changeOrigin: true, // 允许跨域
          secure: false, // 如果是https接口，需要配置这个参数
          // ws: true, //websocket支持
          rewrite: url => url.replace(/^\/api/, '/'),
        },
      },
    },
    // 引入全局的基础less变量
    css: {
      preprocessorOptions: {
        less: {
          modifyVars: {
            hack: `true; @import (reference) "${path.resolve("src/assets/css/base.less")}";`,
          },
          javascriptEnabled: true,
        },
      },
    },
    // 生产环境打包配置
    build: {
      terserOptions: {
        // 去除 console debugger
        compress: {
          drop_console: true,
          drop_debugger: true,
        },
      },
    },
  })
